public class code2 {
//    top 101 判断是不是二叉搜索树
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类
     * @return bool布尔型
     */
    public boolean isValidBST (TreeNode root) {
        // write code here
        if(root.left == null && root.right == null) {
            return true;
        }
        // 这里可以创建出一个顺序表，通过中序遍历 (左、根、右) 将元素进行存储
        // 这种遍历下，在数组中的元素应该是从小到大依次排列的，如果出现异常情况，直接返回 false
        ArrayList<Integer> list = new ArrayList<>();
        Judgment(root, list);
        // 将存储到顺序表中的元素进行遍历判断
        for(int i = 0; i < list.size()-1; i++) {
            if(list.get(i) > list.get(i + 1)) {
                return false;
            }
        }
        // 如果没有问题就返回 true
        return true;
    }
    private static void Judgment(TreeNode root, ArrayList<Integer> list) {
        // 这里可以通过中序遍历来进行判断
        if(root == null) {
            return;
        }
        Judgment(root.left, list);
        list.add(root.val);
        Judgment(root.right,list);
    }
}
